package sistema;
import java.util.ArrayList;
import java.util.List;

import objetos.Emprestimo;
import objetos.Item;
import objetos.Usuario;
/**
 * Classe responsavel por conter todas as listas de objetos cadastrados no sistema. Implementa o padrao Singleton ja
 * que eh necessario uma unica instancia do repositorio de dados.
 * 
 * @author Filipe Alencar, Felipe Jose Cavalcanti, Rodrigo L. de Brito, Thiago Goncalves, Victor Hugo Arcelino.
 *
 */
public class RepositorioDeDados {
	
	private static RepositorioDeDados _repositorio;
	
	private List<Usuario> usuarios;
	private List<Item> itens;
	private List<Emprestimo> emprestimos;
	
	
	private RepositorioDeDados(){
		usuarios = new ArrayList<Usuario>();
		itens = new ArrayList<Item>();
		emprestimos = new ArrayList<Emprestimo>();
		
	}
	/**
	 * Garante que uma unica instancia da classe ser� criada.
	 * @return O repositorio de dados.
	 */
	public static RepositorioDeDados getInstance(){
		if(_repositorio == null) 
			_repositorio = new RepositorioDeDados();  
		return _repositorio;
	}
	
	/**
     * Retorna os itens cadastrados no sistema.
     * @return Lista de itens cadastrados no sistema.
     */
	public List<Item> getItens() {
		return itens;
	}
	/**
	 * Retorna os usuarios cadastrados no sistema.
	 * @return Lista de usuarios cadastrados.
	 */
	public List<Usuario> getUsuarios() {
		return usuarios;
	}
	
	/**
	 * Retorna os emprestimos realizados e guardados no sistema.
	 * @return Lista de emprestimos realizados.
	 */
	public List<Emprestimo> getEmprestimos() {
		return emprestimos;
	}
	
	/**
     * Define uma nova lista de itens adicionados ao sistema.
     * @param pessoas Nova lista de itens.
     */
	public void setItens(List<Item> itens) {
		this.itens = itens;
	}
	
	/**
     * Define uma nova lista de usuarios adicionados ao sistema.
     * @param pessoas Nova lista de usuarios.
     */
	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	
	/**
	 * Define uma nova lista de emprestimos.
	 * @param emprestimos Nova lista de emprestimos.
	 */
	public void setEmprestimos(List<Emprestimo> emprestimos) {
		this.emprestimos = emprestimos;
	}
	
	/**
	 * Zera o repositorio de dados.
	 */
	public void zerarRepositorio(){
		_repositorio = new RepositorioDeDados();
	}
}
